TWebBrowser a nove okno v MDI apl.
Otázka od: Daňa Petr
11. 11. 2002 9:31
Zdravim,
mam MDI aplikaci, kde jsou child okna s komponentou TWebBrowser. Pokud se ma
otevrit nove okno IE (treba pri shift-click na odkaz), jsem schopen to poznat v
udalosti NewWindow2. Pak mohu otevrit nove child okno misto toho, aby se
pustilo samotne IE. Problem je v tom, jak tomu novemu oknu dat vedet, co ma
vlastne otevrit. NewWindow2 ma v podstate akorat parametr
"var ppDisp: IDispatch". Predpokladam, ze v tom novem okne bude nejlepsi
zavolat funkci Navigate, ale jak uz jsem psal, nemam data pro jeji parametry.
Muzete mi nekdo poradit, jak to tedy udelat?
Diky
Peca
Odpovedá: ing. Jan Fiala
11. 11. 2002 9:40
A nestaci udalost OnNavigate ?
--
ing. Jan Fiala
mailto:jan.fiala@iol.cz
11.11.2002 Daňa Petr:
> Zdravim,
> mam MDI aplikaci, kde jsou child okna s komponentou TWebBrowser. Pokud se ma
otevrit nove okno IE (treba pri shift-click na odkaz), jsem schopen to poznat v
udalosti NewWindow2. Pak mohu otevrit
> nove child okno misto toho, aby se pustilo samotne IE. Problem je v tom, jak
tomu novemu oknu dat vedet, co ma vlastne otevrit. NewWindow2 ma v podstate
akorat parametr "var ppDisp: IDispatch".
> Predpokladam, ze v tom novem okne bude nejlepsi zavolat funkci Navigate, ale
jak uz jsem psal, nemam data pro jeji parametry.
> Muzete mi nekdo poradit, jak to tedy udelat?
Odpovedá: Daňa Petr
11. 11. 2002 10:31
Je tam jen OnNavigateComplete, ale to mi nepomuze. Prvni se zavola ta udalost
OnNewWindow, ve ktere musim zakazat otevreni samostatneho okna IE a vytvorit
vlastni child okno, ale pak uz se dal nehnu ...
>
> A nestaci udalost OnNavigate ?
>
> > Zdravim,
> > mam MDI aplikaci, kde jsou child okna s komponentou
> TWebBrowser. Pokud se ma otevrit nove okno IE (treba pri
> shift-click na odkaz), jsem schopen to poznat v udalosti
> NewWindow2. Pak mohu otevrit
> > nove child okno misto toho, aby se pustilo samotne IE.
> Problem je v tom, jak tomu novemu oknu dat vedet, co ma
> vlastne otevrit. NewWindow2 ma v podstate akorat parametr
> "var ppDisp: IDispatch".
> > Predpokladam, ze v tom novem okne bude nejlepsi zavolat
> funkci Navigate, ale jak uz jsem psal, nemam data pro jeji parametry.
> > Muzete mi nekdo poradit, jak to tedy udelat?
>
Odpovedá: Ales Vasicek
11. 11. 2002 10:25
Ahoj,
pouzij udalost BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
v te si schovej do nejake promenne URL a v nove vytvorenem okne pomoci
Navigate zase prirad.
A.
> -----Original Message-----
> From: Daňa Petr [mailto:Petr.Dana@pvt.cz]
>
> Je tam jen OnNavigateComplete, ale to mi nepomuze. Prvni se
> zavola ta udalost OnNewWindow, ve ktere musim zakazat
> otevreni samostatneho okna IE a vytvorit vlastni child okno,
> ale pak uz se dal nehnu ...
Odpovedá: Ondrej Kelle
11. 11. 2002 10:54
>>> mam MDI aplikaci, kde jsou child okna s komponentou
>>> TWebBrowser. Pokud se ma otevrit nove okno IE (treba pri
>>> shift-click na odkaz), jsem schopen to poznat v udalosti
>>> NewWindow2. Pak mohu otevrit
>>> nove child okno misto toho, aby se pustilo samotne IE.
>>> Problem je v tom, jak tomu novemu oknu dat vedet, co ma
>>> vlastne otevrit. NewWindow2 ma v podstate akorat parametr
>>> "var ppDisp: IDispatch".
>> A nestaci udalost OnNavigate ?
> Je tam jen OnNavigateComplete, ale to mi nepomuze. Prvni se
> zavola ta udalost OnNewWindow, ve ktere musim zakazat
> otevreni samostatneho okna IE a vytvorit vlastni child okno,
> ale pak uz se dal nehnu ...
V evente OnNewWindow2 si vytvor novy MDI child form a do var ppDisp vrat
jeho web browser:
procedure TMainForm.WebBrowser1NewWindow2(Sender: TObject; var ppDisp:
IDispatch; var Cancel: WordBool);
var
NewChild: TChildForm;
begin
Cancel := False;
NewChild := CreateNewChild; // funkcia, ktora vrati novu instanciu MDI
child formulara
try
ppDisp := NewChild.WebBrowser1.DefaultInterface as IDispatch;
except
NewChild.Free;
Cancel := True;
raise;
end;
end;
Ak mas vo vytvoreni toho child formu priradeny event handler na
OnBeforeNavigate2 tak ten by sa mal v novom okne zavolat automaticky.
HTH
TOndrej
Odpovedá: Daňa Petr
11. 11. 2002 12:54
Super, diky, to je presne ono.
> V evente OnNewWindow2 si vytvor novy MDI child form a do var
> ppDisp vrat
> jeho web browser:
>
> procedure TMainForm.WebBrowser1NewWindow2(Sender: TObject; var ppDisp:
> IDispatch; var Cancel: WordBool);
> var
> NewChild: TChildForm;
> begin
> Cancel := False;
> NewChild := CreateNewChild; // funkcia, ktora vrati novu
> instanciu MDI
> child formulara
> try
> ppDisp := NewChild.WebBrowser1.DefaultInterface as IDispatch;
> except
> NewChild.Free;
> Cancel := True;
> raise;
> end;
> end;
>